﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using TVH.Web.Code;
using TVH.Negocio;
using TVH.Entidade;
using TVH.Persistencia;

namespace TVH.Exibicao
{
    public partial class Pedidos : BasePage
    {
        NegItemPedido persistencia = new NegItemPedido();
        NegSetor perSetor = new NegSetor();

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                CarregarCombos();
            }
            CarregarGrid();

        }
        public List<Setor> Setores
        {
            get
            {
                return ViewState["Setores"] as List<Setor>;
            }
            set
            {
                ViewState["Setores"] = value;
            }
        }
        private void CarregarCombos()
        {
            if (Setores == null)
            {
                Setores = perSetor.ObterLista();
            }
            ddlSetor.DataSource = Setores;
            ddlSetor.DataTextField = "Descricao";
            ddlSetor.DataValueField = "Id";
            ddlSetor.DataBind();

            ddlSetor.SelectedValue = Session.Usuario.IdSetor.Value.ToString();
        }


        public void btnBuscar_Click(object sender, EventArgs e)
        {
            CarregarGrid();
        }

        public void gridResultado_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            (sender as GridView).PageIndex = e.NewPageIndex;
            (sender as GridView).DataBind();
        }

        public void gridResultado_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                var link = e.Row.FindControl("lnkConcluir");
                ((LinkButton)link).Attributes.Add("onclick", "javascript:return confirm('Concluir o preparo do item?')");
            }
        }

        public void gridResultado_RowDeleting(object sender, GridViewDeleteEventArgs e)
        {
            try
            {
                var item = persistencia.Obter(Convert.ToInt32(((GridView)sender).DataKeys[e.RowIndex].Value));
                item.Status = "Concluido";
                persistencia.Alterar(item);
                CarregarGrid();
                ExibirMensagemSucesso("Preparo concluído!");
            }
            catch (Exception ex)
            {
                ExibirMensagemErro("Erro ao atualizar o item!", ex);
            }
        }


        public void gridResultado_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
        {
            //hdnGridAction.Value = "Detalhar";
            //hdnID.Value = ((GridView)sender).DataKeys[e.NewSelectedIndex].Value.ToString();
            //Server.Transfer("~/Cadastro/Categoria.aspx", true);
        }


        public void gridResultado_RowEditing(object sender, GridViewEditEventArgs e)
        {
            try
            {
                var item = persistencia.Obter(Convert.ToInt32(((GridView)sender).DataKeys[e.NewEditIndex].Value));
                item.Status = "Preparando";
                persistencia.Alterar(item);
                e.Cancel = true;
                CarregarGrid();
                ExibirMensagemSucesso("Item em preparo!");
            }
            catch (Exception ex)
            {
                ExibirMensagemErro("Erro ao atualizar o item!", ex);
            }
        }

        public List<ItemPedido> DataSource
        {
            get
            {
                return ViewState["DataSource"] as List<ItemPedido>;
            }
            set
            {
                ViewState["DataSource"] = value;
            }
        }

        private void Filtrar()
        {
            var setorSelecionado = Setores.FirstOrDefault(setor =>
                    setor.Id.Value.ToString().Equals(ddlSetor.SelectedValue));
            if (setorSelecionado != null)
            {
                var filtrado = DataSource.Where(item =>
                    setorSelecionado.Categorias
                        .Exists(categoria => categoria.Id == item.IdCategoria)).ToList();
                ExibirGrid(filtrado);
            }
            else
            {
                ExibirGrid(DataSource);
            }
        }

        private void CarregarGrid()
        {
            DataSource = persistencia.ObterLista(new ItemPedido()
            {
                Status = "Aguardando"
            });
            DataSource.AddRange(persistencia.ObterLista(new ItemPedido()
            {
                Status = "Preparando"
            }));
            DataSource = DataSource.OrderBy(x => x.Pedido.DataPedido).ToList();

            Filtrar();
        }

        private void ExibirGrid(object dataSource)
        {

            gridResultado.DataSource = dataSource;
            gridResultado.DataBind();
        }
    }
}